Writing portable scripts

To write scripts that don't require to specify the full path to csi, the following technique might be useful:

 #!/bin/sh
 #|
 exec csi -s "$0" "$@"
 |#

Another approach would be to have a trampoline script that invokes csi with these contents:

 % cat runscheme
 #!/bin/sh
 exec csi -s $*

and use this header in your scheme script:

 #!/usr/bin/env runscheme
 ...

It should be noted that the following would not be portable

 #!/usr/bin/env csi -s

Because POSIX only requires the shebang command to accept one parameter (csi in this case) and -s might be ignored.